Expand description
Libinput bindings for rust
These bindings closely follow libinput’s concepts and it’s original API. Please refer to the libinput documentation to understand the general structure and concepts.
Differences to the C-Library:
- Refcounting does not need to be done manually. Just call
clone
when you need an additional reference. - Libinput logging cannot (currently) not be customized.
Userdata handling
Multiple types in the libinput library allow to attach a pointer of an arbitrary type, so called userdata
.
Using this data is unsafe as there is no way to find out what type is stored in the libinput struct.
Additionally multiple references to the same libinput object may exist and userdata may be shared mutably.
This is why using and setting userdata is an unsafe operation (except when creating an object).
If you heavily rely on userdata, you should always stored them wrapped in a Mutex
and use the same
type for every userdata access to further simplify usage.
You need to be especially cautious when initializing libinput types from raw pointers, you obtained from other libraries which may set their own userdata. If accessing their userdata make sure no shared mutable access may happen and don’t store something else instead, if the library does not explicitly allow this.
Generally usage of this api is error-prone and discouraged if not needed.
Getting started
To get started check out the Libinput
struct.
Re-exports
pub use event::Event;
Modules
Structs
Enums
Traits
open_restricted
and close_restricted
are called for
each path that must be opened.